Currently, using Microsoft Visual Studio to build large C++ projects is a processor, memory and hard drive intensive activity which renders most other functions of a computer (e.g., personal computer (PC)) useless. Developers' productivity is significantly reduced during a typical software development build cycle for large C++ projects. To circumvent the long build times, at present, developers tend to delay the frequency of builds thereby reducing the frequency of unit testing and potentially increasing the overall defect count. Moreover, the increased build times may delay time-to-market of new initiatives.
A project build time is typically divided between compiling source files and linking object files. At present, compile and link time for C++ projects may take a very long time, and that time tends to grow with the size and complexity of the project. For example, currently, an executable build time for an application may be more than 40 minutes (e.g., 43 minutes). Additionally, idle time during a build phase may be an average of 43 minutes per day or 3.5 hours per week for each developer (e.g., software developer). In this regard, developers may attempt to adapt by compiling less often which may lead to less unit testing and more defects. In some instances, significant loss of productivity due to long build times may cause decreased time-to-market of new initiatives and increased cost of implementing new initiatives.
At present, most of the compile time, associated with a build time, is spent on reading and parsing C++ header files. The same header files are often referenced by multiple source files thereby causing those files to be read and parsed over and over again, which may be inefficient. Each source file is then compiled into an object file which is written to disk. Additionally, each object file may be read, parsed and linked into an executable or library file. The multiple build stages which require multiple disk reads and writes may cause large C++ project build times to exceed 40 minutes on a computer which may be inefficient.
In view of the foregoing drawbacks, it may be beneficial to provide an efficient and reliable mechanism for improving the productivity of building applications.